package indi.zhifa.recipe.bailan.framework.auth.util;
import indi.zhifa.recipe.bailan.framework.auth.entity.BaseTokenObject;

public interface IBaseTokenUtil {

    /**
     * new 一个TokenObject
     *
     * @return
     */
    BaseTokenObject createTokenObject();

    /**
     * 通过TokenObject创建一个token串
     *
     * @param pTokenObject  token对象
     * @return
     */
    String generateToken(BaseTokenObject pTokenObject);

    /**
     * 把tokenObject放入HttpAttribute域中
     *
     * @param pTokenObject  token对象
     * @return
     */
    BaseTokenObject putTokenIntoAttribute(BaseTokenObject pTokenObject);

    /**
     * 该请求是否有token对象
     */
    boolean hasTokenObject();

    /**
     * 获取token对象
     *
     * @return
     */
    BaseTokenObject getTokenObject();

    /**
     * 获取token对象并转换为子类
     *
     * @param pTokenClass 子类类型
     * @return
     * @param <T> token对象
     */
    <T extends BaseTokenObject> T getTokenObject(Class<T> pTokenClass);

    /**
     * 把token串解析成token对象
     *
     * @param pToken token串
     * @return token对象
     */
    BaseTokenObject parseToken(String pToken);
}
